package cn.com.onlinetool.jt809.config;

import cn.hutool.core.date.DateUtil;
import io.micrometer.core.instrument.Measurement;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Map;

/**
 * Aop切面类
 * @author wbw
 */
@Aspect
@Component
public class OpenApiAspect {
    /**
     * 设置切点-上传轨迹数据接口
     */
    @Pointcut("execution(* cn.com.onlinetool.jt809.handler.UpExgMsgHandler.handler(..))")
    public void aspect(){}

    /**
     * 前置通知
     * @param joinPoint
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    @Before("aspect()")
    public void beforeController(JoinPoint joinPoint){
//        InfluxDBResult influxDBResult = new InfluxDBResult();
////       获取influxDBResult的class对象
//        Class<? extends InfluxDBResult> influxDBResultClazz = influxDBResult.getClass();
////       获取clazz上的指定注解
//        Measurement annotation = influxDBResultClazz.getAnnotation(Measurement.class);
//        String name = annotation.name();
////        判断时序数据库measurement是否为所需要的measurement
//        String todayDate = DateUtil.today();
//        String today="T"+todayDate;
//        if (!name.equalsIgnoreCase(today)){
//            //measurement不为需要的measurement，反射去修改name值
//            //获取代理对象
////            双重检查，防止在加锁过程中有别人也进来进行操作 todo
//            InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);
//            //获取代理对象的clazz，
//            Field memberValues = null;
//            try {
//                memberValues = invocationHandler.getClass().getDeclaredField("memberValues");
//                memberValues.setAccessible(true);
//                //获取存储注解值的map，并修改值
//                Map map = (Map) memberValues.get(invocationHandler);
//                map.put("name",today);
//            } catch (NoSuchFieldException | IllegalAccessException e) {
////                反射异常，为获取到memberValues值 todo后期去处理该异常
//                e.printStackTrace();
//            }
//        }
//        //name为需要的值，直接放过
    }
}
